var obj = {
  name: 'why'
}

// 类 构造函数
// function Object() {

// }
// 类 构造函数
// function Function() {

// }




// [Object: null prototype] {}
// 对象里面是有一个__proto__对象:隐式原型对象
console.log(obj.__proto__ === Object.prototype); // true


// 函数本身也是一个对象!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// var Foo = new Function() 等同于下面的
// Foo是一个函数,那么它会有一个显示原型对象: Foo.prototype
// Foo.prototype来自哪里? 创建了一个函数 Foo.prototype = {constructor:Foo}

// Foo是一个对象,那么它会有一个隐式原型对象:Foo.__proto__
// Foo.__proto__来自哪里? new Function() => Foo.__proto__ = Function.prototype
// Function.prototype = {constructor:Function}
function Foo() {}


console.log(Foo.prototype === Foo.__proto__); // false
console.log(Foo.prototype.constructor); // Foo
console.log(Foo.__proto__.constructor); // Function

console.log('------------------------');
// Function是由自己创建出来的
console.log(Function.prototype === Function.__proto__); // true

console.log('--------------------------');

var foo1 = new Foo()
var obj1 = new Object()